package com.czk.sort;

import java.util.Arrays;

/**
 * 选择排序的实现
 *
 * @Author:ChenZhangKun
 * @Date: 2020/6/25 16:27
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] array = {2, 5, 8, 4, 6, 2, 1, 3, 9, 10, 15, 11, 7};
        // selectSort(array);
        System.out.println(Arrays.toString(array));

        selectSort_2(array);
    }

    /**
     * 自己的写法
     *
     * @param array
     */
    public static void selectSort(int[] array) {
        // 最小值
        int min = -1;
        for (int i = 0; i < array.length - 1; i++) {
            min = array[i];
            // 每次从拿到最小的后一个开始查找最小数
            for (int j = i; j < array.length; j++) {
                if (min > array[j]) {
                    // 交换数值
                    int temp = min;
                    min = array[j];
                    array[j] = temp;
                }
            }
            array[i] = min;
        }
    }

    /**
     * 官方写法
     *
     * @param array
     */
    public static void selectSort_1(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            // 最小值的索引
            int minIndex = i;
            // 最小值
            int min = array[i];
            for (int j = i + 1; j < array.length; j++) {
                if (min > array[j]) {
                    // 交换数值和索引
                    min = array[j];
                    minIndex = j;
                }
            }
            // 当没有发生数值交换的时候
            if (minIndex != i) {
                array[minIndex] = array[i];
                array[i] = min;
            }
            System.out.println("第" + (i + 1) + "轮后  " + Arrays.toString(array));
        }
        System.out.println("最后   " + Arrays.toString(array));
    }

    public static void selectSort_2(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            // 定义最小值
            int min = array[i];
            // 定义最小值的索引，便于最会交换
            int minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                // 比较
                if (array[j] < min) {
                    // 交换索引
                    min = array[j];
                    minIndex = j;
                }
            }
            // 交换值
            if (minIndex != i) {
                // 交换值
                array[minIndex] = array[i];
                array[i] = min;
            }
            System.out.println("第" + (i + 1) + "轮后  " + Arrays.toString(array));
        }
        System.out.println("最后   " + Arrays.toString(array));
    }
}
